/**
 * date：2010-11-11
 * author：eason
 * description：依次执行序列动作的动作类.
 * 对于序列中的动作(_actList),采用的执行方式是依次执行.
 */
package com.pickgliss.action
{
	public class OrderQueueAction extends BaseAction
	{
		protected var _actList : Array;
		protected var _count : int;
		
		public function OrderQueueAction(actList : Array, timeOut : uint = 0)
		{
			_actList = actList;
			super(timeOut);
		}
		public override function act():void
		{	
			cancel();//先取消正在执行的动作.
			
			startAct();
			
			super.act();
		}
		/**
		 * 开始执行。 
		 * 
		 */		
		private function startAct():void
		{
			_count = 0;
			if(_actList.length > 0){
				actOne();
			}
		}
		/**
		 * 执行序列中的一个动作。 
		 * 
		 */		
		protected function actOne():void
		{
			var action : IAction = _actList[_count] as IAction;
			action.setCompleteFun(actOneComplete);
			action.act();
		}
		/**
		 * 序列中的一个动作执行完成的处理函数。 
		 * @param target
		 * 
		 */		
		private function actOneComplete(target : IAction):void
		{
			actNext();
		}
		/**
		 * 执行序列中的下一个动作。 
		 * 
		 */		
		protected function actNext():void
		{
			_count++;
			if(_count < _actList.length){
				actOne();
			}else{
				execComplete();
			}
		}
		/**
		 * 取消该动作。 
		 * 该方法内部实现了取消序列中正在执行的动作，从而停止整个序列的执行。
		 */		
		override public function cancel():void
		{			
			if(_acting){
				var action : IAction = _actList[_count] as IAction;
				if(action){
					action.setCompleteFun(null);
					action.cancel();
				}
			}
			super.cancel();
		}
		/**
		 * 获得动作序列。 
		 * @return 
		 * 
		 */		
		public function getActions():Array
		{
			return _actList;
		}
	}
}